package com.todomvc.tests;

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import com.todomvc.fw.NavigationHelper;
import com.todomvc.fw.Todo;
import com.todomvc.fw.TodoHelper;
import com.todomvc.fw.Todos;

public class TodoCreateTests extends TestBase {

	private NavigationHelper navMan;
	private TodoHelper todoMan;

	@BeforeClass
	public void getManagers () {
		todoMan = manager.getTodoHelper();
		navMan = manager.getNavigationHelper();
		navMan.openAngularPage();
	}
	
	@Test
	public void validTodoShouldBeCreated () {
		Todo validTodo = new Todo("Say hello!");
		Todos oldList = todoMan.getTodos();
		todoMan.add(validTodo);
		Todos newList = todoMan.getTodos();
		assertThat(newList, equalTo(oldList.withAdded(validTodo)));
	}

	@Test
	public void emptyTodoShouldNotBeCreated () {
		Todo emptyTodo = new Todo();

		Todos oldList = todoMan.getTodos();
		todoMan.add(emptyTodo);
		Todos newList = todoMan.getTodos();
		assertThat(newList, equalTo(oldList));
	}
	
	@Test
	public void variousTodosShouldBeCreated() {
		Todo todo1 = new Todo ("Say another hello");
		Todo todo2 = new Todo ("Say goodbye");
		
		Todos oldList = todoMan.getTodos();
		todoMan.add(todo1);
		todoMan.add(todo2);
		Todos newList = todoMan.getTodos();
		assertThat(newList, equalTo(oldList.withAdded(todo1).withAdded(todo2)));
	}

	@Test
	public void sameTodosShouldBeCreated() {
		Todo todo = new Todo ("Say something");
		
		Todos oldList = todoMan.getTodos();
		todoMan.add(todo);
		todoMan.add(todo);
		Todos newList = todoMan.getTodos();
		assertThat(newList, equalTo(oldList.withAdded(todo).withAdded(todo)));
	}

	
	@Test
	public void todoCountShouldBeUpdatedOnCreation () {
		Todo validTodo = new Todo("Say hello!");
		int oldTodoCount = todoMan.getTodoCount();
		todoMan.add(validTodo);
		int newTodoCount = todoMan.getTodoCount();
		assertThat(newTodoCount, equalTo(oldTodoCount + 1));
	}

}
